package net.callumtaylor.swipetorefresh.view; import net.callumtaylor.swipetorefresh.helper.RefreshDelegate; import net.callumtaylor.swipetorefresh.helper.RefreshDelegate.ScrollDelegate; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.ScrollView; public class RefreshableScrollView extends ScrollView implements View.OnTouchListener, ScrollDelegate { private boolean canRefresh = true; public RefreshDelegate refreshDelegate; public RefreshableScrollView(Context context) { super(context); init(); } public RefreshableScrollView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public boolean getCanRefresh() { return this.canRefresh; } public void setCanRefresh(boolean canRefresh) { this.canRefresh = canRefresh; } /** * Starts a refresh intent only showing the indeterminate progress */ public void indeterminateRefresh() { refreshDelegate.fauxRefresh(); } private void init() { refreshDelegate = new RefreshDelegate(getContext(), this); setOnTouchListener(this); } @Override public boolean isScrolledToTop() { return getScrollY() <= 100; } @Override public boolean canStartRefreshing() { return isScrolledToTop(); } public void onRefreshComplete() { refreshDelegate.onRefreshComplete(); } @Override public final boolean onTouch(View view, MotionEvent event) { if (canRefresh) { refreshDelegate.onTouch(view, event); } return false; } public void setOnOverScrollListener(OnOverScrollListener l) { refreshDelegate.setOnOverScrollListener(l); } public void startRefresh() { refreshDelegate.startRefresh(); } @Override public void onResetTouch(){} }